package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOServicio;
import pe.com.cotelasa.scp.dominio.service.IServicioServicio;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.common.ResultadoValidacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.Contacto;
import pe.com.cotelasa.scp.entidad.Servicio;

/**
 * @author zer0
 */
@Service
public class ServicioServicioImpl implements IServicioServicio, Serializable {

    private static final long serialVersionUID = -3899534497036527683L;
    @Inject
    private IDAOServicio daoServicio;

    @Override
    public Collection<Servicio> listarServiciosActivos() throws ServiceException {
        try {
            return daoServicio.listarActivos(Servicio.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Servicio> listarTodosServicios() throws ServiceException {
        try {
            return daoServicio.listarTodos(Servicio.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public boolean validarServicio(Servicio servicio) throws ServiceException {
        try {
            if(daoServicio.obtenerServicioPorNombre(servicio.getNombre())==null)
                return true;
            else return false;
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio guardarServicio(Servicio servicio) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            //servicio.setId(5);
            servicio.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoServicio.insertar(servicio);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Servicio conseguirServicioPorId(Integer idServicio) throws ServiceException {
        try {
            return daoServicio.obtenerEntidadPorId(Servicio.class, idServicio);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio actualizarServicio(Servicio servicio) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoServicio.actualizar(servicio);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<Servicio> listarServiciosPorFiltro(Servicio servicio) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("nombre", servicio.getNombre());
            if(servicio.getIdCategoriaArticulo()!=null) parametro.put("idCategoriaArticulo", servicio.getIdCategoriaArticulo().getId());
            parametro.put("estadoRegistro", "A");
            return daoServicio.obtenerColeccionEntidadPorFiltros(Servicio.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Servicio obtenerServicioPorNombre(String nombre) throws ServiceException {
        try {

            return daoServicio.obtenerServicioPorNombre(nombre);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
}
